#!/bin/bash

CONFIG_CONTROLCARGA="/etc/michelle/modulos/controlcarga/config/$ME"

#Procesos de sesion
PROCSESION=`ps --ppid $COREPID -o pid`
#Elimino la primer el primer elemento que dice "PID" y le agrego el proceso COREPID
PROCSESION=$(echo $PROCSESION $COREPID|awk '{for(i=2; i<=NF; i++) print $i;}')


function consumoCPU(){
		detcpu=$(ps u $PROCSESION | sort  -k 3 -r | head -2 | awk '{print $3}')
		loadcpu=$(echo $detcpu|awk -F 'CPU ' '{print $2;}')
		echo $loadcpu
}
function consumoPID(){
		detpid=$(ps u $PROCSESION | sort  -k 3 -r | head -2 | awk '{print $2}')
		loadpid=$(echo $detpid|awk -F 'PID ' '{print $2;}')
		echo $loadpid
}

function niceActual(){
	detnice=$(ps -l NI $PID_ANTERIOR | awk '{print $8}')
	loadnice=$(echo $detnice|awk -F 'NI ' '{print $2;}')
	echo $loadnice
}

function Informacion(){
	echo "Información de control de carga"
	echo "-------------------------------"
	echo "Maximo consumo de cpu: $MAXIMO"
	if [ $PID_ANTERIOR -gt -1 ]; then
		echo "Proceso: $PID_ANTERIOR"
		NICE_ACTUAL=`niceActual`
		echo "Nice: $NICE_ACTUAL"
		echo "Cantidad de incrementos del nice: $CANT_NICE"
	fi
	return 0;
}

function Iniciar(){
	if [ ! -e $CONFIG_CONTROLCARGA ]; then 
		return 1
	fi	
	export MAXIMO=`cat "$CONFIG_CONTROLCARGA"|grep "MAXIMO_CPU"|awk '{print $2}'`
	export PID_ANTERIOR="-1"
	export CANT_NICE=0
	return 0
}

function Detener(){
		export MAXIMO=""
		export PID_ANTERIOR=""
		export CANT_NICE=""				
		return 0
}

function Procesar () {
	CPU=`consumoCPU`
	PID=`consumoPID`
	PID_ES_MAXIMO=`echo "$CPU > $MAXIMO	" | bc`
	if [ $PID_ES_MAXIMO -eq 1 ]; then
		if [ $PID -eq $PID_ANTERIOR ]; then
			CANT_NICE=$(($CANT_NICE + 1))
			#incremento en 5 el nice
			NICE_ACTUAL=`niceActual`
			NUEVO_NICE=$(($NICE_ACTUAL + 5))
			renice +$NUEVO_NICE -p $PID
			if [ $CANT_NICE -eq 4 ]; then
				kill -9 $PID
				echo "El proceso $PID fue eliminado, debido al incremento continuo del nice."
			fi
		else
			PID_ANTERIOR=$PID
			CANT_NICE=1
			NICE_ACTUAL=`niceActual`
			NUEVO_NICE=$(($NICE_ACTUAL + 5))
			renice +$NUEVO_NICE -p $PID
		fi
	fi
	return 0
}

######################################

OPERACION=$1
case $OPERACION in
	"Informacion"|"informacion")
		Informacion
		;;
	"Iniciar"|"iniciar")
		Iniciar
		;;
	"Detener"|"detener")
		Detener
		;;
	"Procesar"|"procesar")
		Procesar
		return 0
		;;
esac

